import path from 'path'
import fs from 'fs-extra'
import { cwd } from './utils/env'

const UPDATE_LOG = 'UPDATELOG.md'

// parse the UPDATELOG.md
export async function resolveUpdateLog(tag: string) {
  const reTitle = /^## v[\d.]+/
  const reEnd = /^---/

  const file = path.join(cwd, UPDATE_LOG)

  if (!(await fs.pathExists(file))) {
    throw new Error('could not found UPDATELOG.md')
  }

  const data = await fs.readFile(file).then((d) => d.toString('utf8'))

  const map = {} as Record<string, string[]>
  let p = ''

  data.split('\n').forEach((line) => {
    if (reTitle.test(line)) {
      p = line.slice(3).trim()
      if (!map[p]) {
        map[p] = []
      } else {
        throw new Error(`Tag ${p} dup`)
      }
    } else if (reEnd.test(line)) {
      p = ''
    } else if (p) {
      map[p].push(line)
    }
  })

  if (!map[tag]) {
    throw new Error(`could not found "${tag}" in UPDATELOG.md`)
  }

  return map[tag].join('\n').trim()
}
